package hxg.single;

/**
 * @author HeXiangGuang
 * @create 2021-06-22 12:20
 * 单例模式
 */
public class Singleton {
    //双重校验关键字volatile,被volatile修饰的值，将不会被本地线程缓存，保证所有对该变量的读写都是直接操作共享内存，从而确保多个线程能正确处理该变量，但是使用volatile运行效率并不高。不建议大量使用双重校验。
    private volatile static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {      //第一次校验，是否实例化了
        //第二次校验，同步块，线程安全的创建实例
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}
